package com.zb.hello.util;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class DateUtil {
	// 全局默认的时间格式
		private final static String pattern = "yyyy-MM-dd HH:mm:ss";

		/**
		 * 字符串转时间
		 * 
		 * @param str时间字符串
		 * @param pattern字符串的时间格式"yyyy-MM-dd HH:mm:ss"
		 * @return LocalDateTime
		 */
		public static LocalDateTime str2Date(String str, String pattern) {
			if (str != null && !str.isEmpty() && pattern != null && !pattern.isEmpty()) {
				DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
				LocalDateTime date = LocalDateTime.parse(str, dateTimeFormatter);
				return date;
			}
			return null;
		}

		/**
		 * 字符串转时间
		 * 
		 * @param str时间字符串（格式必须为"yyyy-MM-dd HH:mm:ss"）
		 * @return LocalDateTime
		 */
		public static LocalDateTime str2Date(String str) {
			return str2Date(str,pattern);
		}

		/**
		 * 字符串转long型（时间戳）
		 * 
		 * @param str时间字符串
		 * @param pattern时间字符串的格式
		 * @return long
		 */
		public static long str2Long(String str, String pattern) {
			if (str != null && !str.isEmpty() && pattern != null && !pattern.isEmpty()) {
			DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
			LocalDateTime date = LocalDateTime.parse(str, dateTimeFormatter);
			return date.atZone(ZoneId.of("+8")).toInstant().toEpochMilli();
			}
			return 0;
		}

		/**
		 * 字符串转long型（时间戳）
		 * 
		 * @param str时间字符串（格式必须为"yyyy-MM-dd HH:mm:ss"）
		 * @return
		 */
		public static long str2Long(String str) {
			return str2Long(str, pattern);
		}
		
		/**
		 * LocalDateTime类型转long型
		 * @param date
		 * @return
		 */
		public static long date2Long(LocalDateTime date) {
			if(date != null) {
				return date.atZone(ZoneId.of("+8")).toInstant().toEpochMilli();
			}
			return 0;
		}
		
		/**
		 * long型转为时间字符串
		 * @param l
		 * @param pattern需要转为的时间字符串的格式
		 * @return
		 */
		public static String long2Str(long l,String pattern) {
			if(l > 0) {
				DateTimeFormatter df= DateTimeFormatter.ofPattern(pattern);
			    String str = df.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(l),ZoneId.of("Asia/Shanghai")));
			    return str;
			}
			return null;
		}
		
		/**
		 * long型转为时间字符串
		 * @param l
		 * @return 时间字符串返回格式为"yyyy-MM-dd HH:mm:ss"
		 */
		public static String long2Str(long l) {
			return long2Str(l, pattern);
		}
		
		/**
		 * long型转LocalDateTime类型
		 * @param long
		 * @return
		 */
		public static LocalDateTime long2Date(long l) {
			 return str2Date(long2Str(l));
		}
		
		/**
		 * 得到当前时间的字符串
		 * @param pattern 需要字符串的时间格式
		 * @return
		 */
		public static String getNowStr(String pattern) {
			if(pattern != null &&  !pattern.isEmpty()) {
				DateTimeFormatter df= DateTimeFormatter.ofPattern(pattern);
			    return df.format(LocalDateTime.now());
			}
			return null;
		}
		
		/**
		 * 得到当前时间的字符串
		 * @return 时间字符串返回格式为"yyyy-MM-dd HH:mm:ss"
		 */
		public static String getNowStr() {
			return getNowStr(pattern);
		}
}
